//
//  NSArray+MyArray.m
//  支付宝口碑补充
//
//  Created by zero on 16/12/23.
//  Copyright © 2016年 zero. All rights reserved.
//

#import "NSArray+ZArray.h"

@implementation NSArray (ZArray)

#pragma mark
#pragma mark - 判断 plist文件的后缀 没有后缀 就添加上 同时读取数据到一个 数组中

+ (NSArray *)arrayOfPlistName:(NSString *)plistName{
    
    plistName = [plistName hasSuffix:@".plist"] ? plistName :
                [NSString stringWithFormat:@"%@.plist",plistName];
    
    //  url 路径
    NSURL *url = [[NSBundle mainBundle]URLForResource:plistName withExtension:nil];
    
    //  把数据先读到临时的数组中
    NSArray *array = [NSArray arrayWithContentsOfURL:url];
    
    return array;
    
}

#pragma mark
#pragma mark - 字典转模型 (参数1:plist文件名 参数2:模型类名)

+ (instancetype)z_arrayWithPlistName:(NSString *)plistName andClassName:(NSString *)className{
    
    NSMutableArray *arr = [self z_mutArrayWithPlistName:plistName andClassName:className];
       //  返回一个不可变的数组
    return arr.copy;
}

#pragma mark
#pragma mark - 字典转模型 (参数1:plist文件名 参数2:模型类名) 可变数组

+ (instancetype)z_mutArrayWithPlistName:(NSString *)plistName andClassName:(NSString *)className{

    //  调用方法来获取plist中的值
    NSArray *array = [self arrayOfPlistName:plistName];
    //  创建临时可变的数组
    NSMutableArray *arrayM = [NSMutableArray array];
    
    //  根据拿到的字符串 来获取类的信息
    Class clz = NSClassFromString(className);
    //  错误提示
    NSAssert(clz != nil, @"类名不可用");
    
    [array enumerateObjectsUsingBlock:^(NSDictionary *dict, NSUInteger idx, BOOL * _Nonnull stop) {
        
        //  根据类来创建一个对象
        NSObject *model = [[clz alloc]init];
        //  添加数据
        [model setValuesForKeysWithDictionary:dict];
        //  添加到可变数组中
        [arrayM addObject:model];
        
    }];
    //  返回一个不可变的数组
    return arrayM;

}

#pragma mark
#pragma mark - 俩个数组之间的模型 嵌套

+ (instancetype)z_arrayOfDoubleWithPlist:(NSString *)plistName andClassName:(NSString *)className{
    
    //  调用方法来获取 plist的文件内容
    NSArray *array = [self arrayOfPlistName:plistName];
    
    //  创建可变数组
    NSMutableArray *arrayM = [NSMutableArray array];
    
    //  根据拿到的字符串 来获取类的信息
    Class clz = NSClassFromString(className);
    //  错误提示
    NSAssert(clz != nil, @"类名不可用");
    //  遍历
    for (NSArray *tempArr in array) {
        
        //  创建可变数组
        NSMutableArray *tempM = [NSMutableArray array];
        
        //  遍历
        for (NSDictionary *dic in tempArr) {
            //  实例化模型对象
            NSObject *model = [[clz alloc]init];
            //  KVC 赋值
            [model setValuesForKeysWithDictionary:dic];
            
            //  添加到临时可变数组中
            [tempM addObject:model];
        }
        
        //  赋值
        [arrayM addObject:tempM];
        
    }
    
    
    return arrayM.copy;
}
@end
